LabVIEW Idea Exchange

Community Browser
cancel
Showing results forย 
Search instead forย 
Did you mean:ย 
Post an idea

I've had a chance to use the UTF-8 support in LabVIEW 2026 Q3, and for the most part I love it.

This post documents one of just a handful of headaches I've encountered with it.

 

Since a given character in UTF-8 has a variable number of bytes depending on its numeric value, it's a bit involved to convert between the number of bytes a string occupies and the number of characters represented.

 

For example, often you want to know the length of a string in characters rather than its length in bytes.

 

There are some functions that could benefit from having the ability to toggle "character count" mode, vs. "byte count" mode. Namely:

  1. String Length
  2. String Subset
  3. Replace Substring
  4. Search and Replace String
  5. Match Pattern (Except it doesn't work with UTF-8 yet)
  6. Match Regular Expression
  7. Search/Split String

There are probably a couple of additional ones I left out.

 

For these functions, would it be possible to add a context menu selection, "Character Count", that the user may use to toggle off character count mode?

 

This is what I envision the option might look like for the String Length node. Note the "abc" visual cue on the function connected to the "Chars" terminal. The Character Count menu item would have a check mark leading the text if Character Count were enabled.

 

CharCount.png

 

In my first project using it to localize UIs, I had to "roll my own" VIs that work with UTF-8 strings in character counts. For length, I check bits 3-7 of the first byte of a char to determine how many bytes represent it.

 

Thanks very much,

 

Jim

 

Recognition is in order: A huge thanks to NI's developers who finally implemented the UTF-8 support.

I think there was serious discussion about how it would be implemented only two years ago (or was it last year?) at GDevCon NA.

It was a very quick turnaround considering how much had to be done to support it, especially in all of the myriad properties and methods of controls.

For the most part, everything just works, and I wrote my first UI with true natively supported translation.

I would like to revive an idea proposed by matt.baker in January 2017. The idea was declined because it received less than 3 kudos in 3 years.

 

Specifically, it would be great if LabVIEW programmers were able to view the Dataflow Intermediate Representation (DFIR) of a VI.

 

For clarity, I am asking for the ability to strictly view the DFIR, not to edit or alter it. Simply viewing the DFIR in a window, perhaps with the ability to save the DFIR diagram as a PNG or PDF file.

 

For those who might not know, please note that internally NI has long had the ability to view the DFIR of any VI. This idea asks to essentially share the internal viewing tool (or a slimmer, less-fully-featured version of the internal viewing tool) with the LabVIEW community.

 

Viewing the DFIR would be useful to programmers that:

  • Develop high-throughput, high-performance applications where achieving the highest possible performance is the goal.
  • Develop small, low-level reusable libraries, including free, open-source VIPM packages. These programmers could use the DFIR as a tool in their arsenal, helping them deliver reusable code with the best possible performance. 
  • Are looking to understand the LabVIEW compiler better, to gain intuition into efficient vs. not-efficient LabVIEW coding constructs. An efficient coding construct is one that results in a lean DFIR.

Other programming languages expose their intermediary representations. For example, C# programmers can use tools such as the ILDASM (Intermediate Language DisAssembler) to inspect the .NET IL (Intermediate Language) produced by C#. Source: Intermediate Language (ILDASM & ILASM), Common Intermediate Language - Wikipedia.

 

Based on brief research (please correct me if I'm wrong), it seems that Java programmers have access to something similar, named the ability to inspect the Java Virtual Machine (JVM) bytecode. There is a useful quote in the JVM bytecode Wikipedia page: "Understanding bytecode and what bytecode is likely to be generated by a Java compiler helps the Java programmer in the same way that knowledge of assembly helps the C or C++ programmer." The LabVIEW DFIR would help LabVIEW programmers in the same way that this quote suggests.

 

Resources:

The following is an example DFIR diagram presented in slide 24 of the pptx.

DFIR Example From PPTX.png

Counter-arguments

In a reply to the original idea, AristosQueue mentions that "This is not something we are going to be productizing." and highlights that DFIR diagrams can be large and complex even for simple VIs.

 

While I fully agree and understand that DFIR diagrams may be complex even for simple VIs, comparing DFIRs from one version of a VI with another could still be a fruitful exercise that helps identify optimisations. For example, let's say the DFIR of A.vi is viewed and saved as a PNG file. The programmer then refactors A.vi while maintaining identical functional behaviour. The programmer then views the new DFIR and visually compares with the initial DFIR (the PNG file). If the DFIR is visually much simpler than before (much fewer graph nodes and connections), there's a good chance that the VI will execute more quickly.

 

In other words, I fully agree with AristosQueue's thoughts that inspecting, understanding, comparing DFIRs may be a time-consuming activity, and activity that only a small subset of programmers may be interested in. Nevertheless, viewing DFIRs would be valuable to experienced programmers who are looking to understand the compiler better, and to produce more efficient code, sometimes for the benefit of the whole community (reusable VIPM packages).

 

In general, anything that increases the observability of LabVIEW is welcome, as it enables us (professional LabVIEW programmers) to make better decisions.

Hey there. When you open, save, or otherwise select a file or directory from a dialog, there are a couple of behaviors that LabVIEW sometimes exhibits that I find very tedious:

 

  1. LabVIEW forgets with path you last selected in a given use case, so you have to repeatedly select the same file or directory over and over
  2. LabVIEW recalls the last used directory, but that directory isn't specific to the context of what you're doing.

 

An example of the first annoyance is the Mass Compile dialog. If you want to mass compile adjacent directories that aren't anywhere near your last opened path, you have to go all the way back to that directory again.

 

I ran into the second annoyance yesterday. I was constantly browsing for VIs and controls in a different directory than my project hierarchy, but also concurrently browsing for .NET Core assemblies in Program Files\dotnet

 

Repeatedly going back and forth between my project hierarchy and the .NET assembly directory became very, very tedious in short order.

LabVIEW recalled the last directory I'd opened, but it made no distinction between the context of the use case.

 

This is kind of along the lines of Rolf's post many years ago:

https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Improve-the-file-dialog-default-path-when-saving-new-files/idi-p/1725842#M14728

 

Another idea somewhere in the Exchange was to have a list of recent paths in the dialog the way TestStand implements the feature. In my opinion, that is probably the easiest implementation that would solve both of the grievances I mentioned.

 

Thanks for your consideration.

Jim

I would like to revive an idea proposed by matt.baker in January 2017. The idea was declined because it received less than 3 kudos in 3 years.

 

Specifically, it would be great if LabVIEW programmers were able to inspect the LLVM Intermediate Representation (IR) associated with a VI and/or an EXE. As one possible implementation, LabVIEW could output the LLVM IR associated with a VI to a text file (perhaps saved with the .ll file extension, which seems to be the usual extension for LLVM IR text representation).

 

If LabVIEW made the LLVM IR available for inspection, LabVIEW programmers could then use existing, non-NI tools to better understand how the LabVIEW compiler works and how to achieve the best possible performance in their LabVIEW applications and/or reuse libraries.

 

Existing LLVM IR inspection tools include:

Commonly Used LLVM Tools.png

 

The ethos of this idea - increasing observability of compilation artefacts to enable LabVIEW programmers to make better decisions - is identical to that of an idea posted earlier today: Increase observability: Ability to view Dataflow Intermediate Representation (DFIR). I posted the two ideas separately because, while their end-goal is identical (more observability), they can be implemented independently of each other.

 

The following diagram explains the LabVIEW compilation process (i.e. the transformations that transform a block diagram into machine code). This diagram originates in slide 19 of the excellent LabVIEW Compiler Under the Hood.pptx attached to this forum post. I annotated the diagram by adding the blue text.

Slide 19 Diagram (edited).png

Idea Implementation

I don't know it for a fact, but it's likely that internally NI have extensive tools and techniques for analysing the LLVM output of the LabVIEW compiler. What this idea requests is for some of these tools (perhaps in a lite, less-fully-featured version) be shared with the rest of the LabVIEW community.

 

Resources

I have been working with lots of Diagram Disable Structures lately. Specifically, I have been using Diagram Disable Structures to performance-benchmark various implementations that are functionally equivalent but whose execution time is different.

 

Currently the only way to enable a Diagram Disable Structure case is to right click the structure and select Enable This Subdiagram from a long right-click menu. This works but is quite slow. I sometimes have to spend more than 1 or 2 seconds to find the option and click on it. This adds up when performing the action dozens or even hundreds of times per day. 

 

Having a native keyboard shortcut that performs this action would increase productivity.

Keyboard shortcut to enable Diagram Disable Structure case.png

Summary: The new Manage Trusted Files window is uncancellable or takes a long time to cancel.

 

Details: I opened a project that had been developed in LabVIEW 2025 Q3 in LabVIEW 2026 Q3 for the first time. This is a large project, it contains several thousand VIs. I opened a simple VI that was part of the project and that depended on From JSON Text.vim (part of the excellent JSONtext VIPM package). The VI had a broken run arrow. The Error Window correctly contained a message explaining that the VI depends on code that hasn't been marked as trusted yet. I think this is all expected and correct behaviour so far.

 

Next I pressed a button named "Manage Trusted Files..." or similar. This popped up the Manage Trusted Files window. I let the window work for a few minutes, without any visible progress. Realising that due to the project size this operation might take a long time, I decided it's best to cancel and uncheck the "Prevent executing untrusted VIs or loading untrusted executable code files" option located in Tools>Options>Security.

 

I pressed the Cancel button. I waited around 2 minutes - there was no visible progress. The screenshot below shows what I was seeing after the Cancel button was pressed.

Manage Trusted Files window is uncancellable (edited).png

 

I decided to terminate LabVIEW using Task Manager. This cost me a few minutes, as I now had to re-open (re-load) the large project, which takes a few minutes.

 

Pressing Cancel should take effect immediately.

avogadro5_0-1787862329273.png

For symmetry with other map nodes, add a default value input to "remove from map" whose value is returned if the key is not found.

 

Because in general looking in a map is the same computation complexity as removing, and future operations speed up the more elements are removed, sometimes it is more efficient to remove instead of look, and a default can be needed for the same reasons as you want for look.

 

Currently, LabVIEW allows a VI to run once or continuously, but not a specific number of times. Adding a numeric field beside the Run button would let users define how many times a VI should execute. The VI would automatically stop after completing the selected number of iterations. This would simplify testing, debugging, and validation without requiring temporary loop counters in the block diagram. The feature would improve productivity while preserving the current behavior when no value is specified.

If a class inherits from a class with a probe, add that inherited probe to the dropdown for default probe on its children:

avogadro5_0-1787937967319.png

The request:

When you add a VI server reference to a VI, it shows up as "This VI".  Why not allow it to be searchable in Quick Drop with the text "This VI" as well?

 

_carl_0-1785165839087.png

 

My experience:

I find myself often wanting to add this to a VI, but when I open up Quick Drop, the first thing that comes to mind is "This VI" because that's how it shows up in the block diagram.  Inevitably I then spend 30 seconds trying to remember what exactly it's called before either eventually remembering it's "VI Server Reference", or giving up and going to the Tools Palette to find it.

Despite being growable for adding outputs (capturing groups), the "Match Regular Expression" XNode is missing some convenient features from other growable functions:

 

1. Cannot add a new element at the top while resizing the node:

Resize from top.gif

 

2. Missing "Add/Remove Element" right-click menus:

 

raphschru_0-1781017278636.png raphschru_1-1781017452535.png

 

 

The lack of these features forces us to rewire everything manually.

This idea has the same motivation as this previous one: making the editor more ergonomic and predictable.

 

Regards,

Raphaรซl.

Having consistent (and therefore predictable) right-click menus is essential for maximizing coding efficiency.

 

Most structures have the following right-click menu items:

 

Visible Items
Help
Examples
Description and Tip...
---------------------------
Add Breakpoint
---------------------------
Structures Palette
Auto Grow
Exclude from Diagram Cleanup
<specific menu 1>
โ‹ฎ
<specific menu N>
Replace with <other structure type 1>
โ‹ฎ
Replace with <other structure type N>
Remove <structure type>
---------------------------
<other specific menus>

 

The right-click menu however has some inconsistencies regarding item order and menu separators for certain structure types:

 

1. "In Place Element Structure" has "Replace" and "Remove" items reversed:

raphschru_0-1778671181846.png

The "Remove" item should always be the last one in the item group (right before the separator) since it is a very common action and the separator offers a quick visual reference point.

 

2. Depending on whether you click on the structure border, the frame name label or the subdiagram label, sometimes an extra item separator appears for no reason:

raphschru_3-1778673447637.png  raphschru_6-1778673672106.png  raphschru_5-1778673565395.png

 

The grouping of the generic items shouldn't vary depending on where you click on the structure. Here we sometimes have 4 item groups instead of 3, which hinders quick menu identification and selection.

 

3. This is more a general remark, but I think items specific to a structure type shouldn't be mixed with the generic ones in the first 3 groups (except maybe for the "Replace" items, since they are related to the "Remove" action).

 

So any specific menu item should belong after the first 3 groups:

raphschru_2-1778672934373.png  raphschru_7-1778673846675.png

raphschru_8-1778673934000.png  raphschru_9-1778673982744.png

 

This last remark could be subject to discussion though, as configuring iteration parallelism and shared clone allocation could be considered a "primary" action (therefore requiring to be closest to the top), even if it is specific to certain structure types.

 

Regards,

Raphaรซl.

This idea is an extension of an existing one.  Here the idea is to have alpha layer support in the Picture Control.  But the truth is NI already added it in 2020 but never put it on the palette, or documented it.  I made a quick demo showing how you can have a highlight over an element of an array showing which one is moused over here. The main VI that powers this is here:

 

https://youtu.be/gqJWBbqoR4s?si=_JT8-K7FoNfaPVhz

 

National Instruments\LabVIEW 2020\vi.lib\picture\PNG\Draw Flattened Blended Pixmap.vi

 

But I would like this idea to extend beyond just putting this VI on the palette or documenting it.  I think NI should add more alpha layer functions too.  Things like convert LV Data to 32 bit, set or adjust the transparency level, and make a single VI that can call the normal Draw Flatten for a 24 bit or less image, and call the Blended one if 32 bit so that a single VI can be used.  I have a couple of these type of features in a pack on VIPM.IO but I'd rather they be built in to LabVIEW.

 

And lastly. If we are going to think about places that alpha information can be used, I think the first place I'd like it is to be able to get an image of a control, but have the background be transparent using something like this:

 

wiebeCARYA_1-1741949642891.png

Combining this with the other tools would mean there's more flexibility in making image based controls.

Not too long ago i learned of the excellent Quickdrop command "Remove Unconnected" (ctrl+shift+r) on Build array and (un)bundle.

However it doesn't work with Index array and i wish it did. ๐Ÿ™‚

That's all!

Yamaeda_0-1777370033284.png

Ctrl+space -> ctrl+shift+r ->

Yamaeda_1-1777370073167.png

 

Suggestion, it should work in this case also!

Yamaeda_2-1777370165875.png

 

It would be nice if there was some option to configure the separator behavior of combo boxes. Currently, entering a hyphen (-) as an item turns into a separator automatically, and there is no way to configure that. What I think would be best in terms of configuration options is a "Separator Value" property in the Edit Items tab of the Properties dialog. The hyphen could be the default value, and it could be changed to an alternate character or character sequence if the developer needs the hyphen to appear as just that for whatever reason. If the value of the property is empty, there are simply no separator lines created.

 

FireFistRedhawk_0-1779113435039.png

 

There is also a bug involving the hyphen as the separator value. When a combo box has the Allow Undefined Strings property unchecked and also has a separator as one of the items, a hyphen is still treated as a valid entry since it is technically one of the values present. This bug exists in the most up-to-date version of 2026 at time of writing, 26.1.2f2. I think the existence of this bug warrants taking a look at the separator behavior in general, but also possibly adding this idea as an enhancement to it.

There are many tasks in LabVIEW that are tedious and manual due to its graphical nature. This is something Nigel or another LLM-controlled scripting feature could change.

 

Allow it to perform structural changes and wiring on the block diagram via natural language commands. Expand itโ€™s capabilities beyond explanation and simple code suggestions to direct, intelligent manipulation of the Front Panel and Block Diagram. The user should be able to describe desired behavior in plain English, and the AI should execute or generate the appropriate structure.

 

One example would be wiring and bundling: โ€œWire all controls whose names contain โ€˜sensorโ€™ to a Bundle By Name node using the matching cluster element names.โ€

 

Another might be diagram layout: โ€œSelect all terminals containing โ€˜tempโ€™ and arrange them by the last number in their name vertically on the right side of the diagram with tight spacing.โ€


Desired Capabilities:

  • Name-based matching and filtering of controls, indicators, and cluster elements.
  • Intelligent wiring (Bundle By Name, Unbundle By Name, auto-wiring by name).
  • Creation of VIMs / reusable subVIs with dynamic behavior.
  • Structural changes (add loops, case structures, bundling logic, etc.).
  • Optional preview + confirmation before applying changes to the diagram.
  • Works on both Front Panel and Block Diagram.
This would turn the AI into a true productivity multiplier โ€” especially for large VIs and configuration-heavy applications. Importantly, it does not necessarily require it to be that advanced; it would mainly be an LLM-controlled driver for VI scripting (leveraging LabVIEWโ€™s existing VI Server and object model).

 

There are lots of very old Idea Exchange entries for plots that seem very promising.

 

Some of these go back to 2009, and this wasn't an exhaustive search. Some of these ideas were posted before some of our forum members were even born! ๐Ÿ˜‰

 

That handful I picked has a total of 317 Kudos- but they're spread out over a large number of individual posts, so this Idea entry is sort of a combo of all of them. Basically, there are LOTS of great ideas from the community, but unfortunately most don't get any traction from NI.

 

The request is to Open Source the plotting tools, similarly to the Icon Editor or the Actor Framework. I know I'd be thrilled to be able to hack around with the plots. I'm sure there are some gnarly secrets under the hood, but that's part of the fun ๐Ÿ™‚

Whereas I readily admit this is a problem between keyboard and chair situation, I occasionally find myself using the Ctrl + I (insert) when having selected a node and intending to Ctrl + P (replace) the node. Likewise, I will sometimes select a wire, identify the VI I am intending to insert and type Ctrl + P. This means I have to start over each time.

 

It would be nice if I tried to insert into a VI instead of a wire, it was smart enough to do a replace. Likewise, if I tried to do a replace on a wire by identifying a VI, it would insert it instead.

Currently converting a string to an array loses the "Size To Text" property, this should be preserved to maintain the desired display after conversion

change to array size to text.png

I once started defining the abstraction level depth of VI's, searching someones coded several subvi's deep and keeping track of the hiearchy in you mind can be difficult, depending on the developers experience. It would be possible to make a visualistion aid that make use on a 3D-like stack of semi-transparent layers of the call chain diagrams, where one can scroll back over the call chain, and with the same scroll action move back to the deeper VI of interest. If the visualized callers use a clever way of highlighting the wire(s) that is(are) selected, in example by 'wobbling' or highlighting the interrfacing wires, then such a visualization excersise can help the programmer to quickly remember to caller code context while working on a deeper level. This might empower lesser experienced developer to investigate code that normally is too complex to grasp.

Look at it of making a LabVIEW diagram show up like a 3D design, where the programmer can see and track the data flow through another dimension.
Since a 3D perspective view with semi-transparency is technical feasible, this is an unused dimension that can be used to improve the program insight to programmers.
This would not be practical for lower level vi's in respect to where one is programming (would become too complicated) but it would certainly work for higher level VI's since it then simply follows the call chain.